﻿//----------------------------------------------------------------
// Desc: 窗口对象
// Edit: ShowLong, http://blog.csdn.net/showlong
//
// Date Created: 2012-04-04
//
// Update Date : 
//
// Copyright (c) Fuel4D (http://www.fuel4d.com), All rights reserved.
//
//----------------------------------------------------------------
#pragma once


struct FEngineParameter;


class IFWnd : public IFMemObject
{
protected:
    explicit IFWnd()
        :fge(0)
    {}

public:
    IFEngine* fge;  // 引擎对象（由引擎自动填写）

    // 窗体初始化
    virtual bool Initialize(FEngineParameter* param) = 0;
    // 窗体运行（进入主循环，由IFEngine调用）
    virtual bool Run() = 0;
    // 释放数据
    virtual void Release() = 0;
    // 当前窗口是否活动状态（最顶层状态）
    virtual bool GetActive() = 0;
    // 当前窗口是否最小化了
    virtual bool GetMinimized() = 0;
    // 取得窗口句柄
    virtual HWND GetHwnd() = 0;
    // 取得窗口对象句柄
    virtual HINSTANCE GetHinstance() = 0;

//----------------------------------------------------------------
// 以下接口是由引擎调用，不能手动调用
//----------------------------------------------------------------
    // 退出
    virtual void __Quit() = 0;
    // 重新设置窗口大小（当调用了引擎的重置渲染区大小时，会调到这里来）
    virtual void __ReSize(WORD w, WORD h, bool center) = 0;
    // 获取窗口的渲染区尺寸
    virtual void __GetCliRect(RECT& rc) = 0;
    // 获取窗口中鼠标的位置
    virtual void __GetCurPos(POINT& pt) = 0;
    // 调整一个区域到显示器屏幕工作区的中心位置
    virtual void __ToWndCenter(RECT& rc) = 0;
    // 程序结束，需要从内存删除此对象时调用，如果你不是NEW出来的，那么可以不处理
    virtual void __DeleteMe(){}
};